function bindData(id, jsonD) {

    var dList,//选择符数组，用于深层JSON内容的选择
        dt,   //循环的HTML模版
        strs, //拼接循环的字符串
        data = jsonD;
    //step1 循环的部分 加载。这里都是DOM的操作
    Array.prototype.forEach.call(document.querySelectorAll("#" + id + " [data-repeat]"), function (elem) {

        dList = getTreeData(elem.getAttribute("data-repeat").split('.'), data, 0);
        elem.removeAttribute("data-repeat"); //把设置属性擅长，防止影响后面的赋值
        dt = elem.innerHTML;
        var strs = [];
        for (i in dList) {

            if ("object" === typeof dList[i]) {
                //strs.push(formatHTML( dt, dList[i]));
                strs.push(getStrSide(dt, dList[i]));
            } else { //如果数组中不是JSON对象 则直接进行赋值
                strs.push(dt.replace(new RegExp("\\{i\\}", "g"), dList[i]));
            }

        }
        elem.innerHTML = strs.join("");
    });

    //step2 一般占位符部分 加载
    var parentNode = document.querySelector("#"+id);
    parentNode.innerHTML = getStrSide(parentNode.innerHTML, data);

    //延迟加载图片
    Array.prototype.forEach.call(document.querySelectorAll("img[data-src]"), function (elem) {
        elem.src = elem.attributes['data-src']['value'];
    });

    /**
     * 获得对应选择的数据, eg: data{ "parent":{ "childName":"Jay" } } ,
     * @param {String} strList 选择字符串 eg: "data.parent.childName"
     * @param {JSON} data 外层数据
     * @param {Number} i  必须设置为0 用于递归计算
     * @return  任何数据
     */
    function getTreeData(strList, data, i) {
        if (strList.length <= i) {
            return data;
        } else {
            return getTreeData(strList, data[strList[i]], ++i);
        }
    }

    /**
     * 对HTML模版字符串进行数据迭代
     * @param {String} str 数据模版字符串
     * @return  {String} 拼接好的字符串
     */
    function getStrSide(str, iData) {
        var res = str;
        var result;
        var beIndex, lastIndex;
        //拿出对应的占位符 进行循环替代
        for (var i = 0, len = res.split('{').length - 1; i < len; i++) {
            beIndex = res.indexOf('{', 0);
            lastIndex = res.indexOf('}', beIndex);
            //获得对于字符串
            result = res.substr(beIndex + 1, lastIndex - beIndex - 1);
            res = res.replace(new RegExp("\\{" + result + "\\}", "g"), getTreeData(result.split('.'), iData, 0));
        }
        return res
    }
}
/*所有绑定数据的基本都引入这个JS,做题和看做题详情要做GA统计,所以在这里写入公共的js代码*/